From fbfaadacd8ed4f38f834f4e511dc79a66f8d9c1d Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Mon, 12 Sep 2005 12:17:31 +0000 Subject: [PATCH] mlock argument to version hypercall in libxc. Signed-off-by: Ian Pratt Signed-off-by: Keir Fraser --- tools/libxc/xc_private.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c index 5a1d78f9d5..58f34c8eb1 100644 --- a/tools/libxc/xc_private.c +++ b/tools/libxc/xc_private.c @@ -425,23 +425,49 @@ int xc_dom0_op(int xc_handle, dom0_op_t *op) int xc_version(int xc_handle, int cmd, void *arg) { - return do_xen_version(xc_handle, cmd, arg); + int rc, argsize = 0; + + switch ( cmd ) + { + case XENVER_extraversion: argsize = sizeof(xen_extraversion_t); break; + case XENVER_compile_info: argsize = sizeof(xen_compile_info_t); break; + case XENVER_capabilities: argsize = sizeof(xen_capabilities_info_t); break; + case XENVER_changeset: argsize = sizeof(xen_changeset_info_t); break; + case XENVER_parameters: argsize = sizeof(xen_parameters_info_t); break; + } + + if ( (argsize != 0) && (mlock(arg, argsize) != 0) ) + { + PERROR("Could not lock memory for version hypercall"); + return -ENOMEM; + } + + rc = do_xen_version(xc_handle, cmd, arg); + + if ( argsize != 0 ) + safe_munlock(arg, argsize); + + return rc; } -unsigned long xc_make_page_below_4G(int xc_handle, u32 domid, - unsigned long mfn) +unsigned long xc_make_page_below_4G( + int xc_handle, u32 domid, unsigned long mfn) { unsigned long new_mfn; + if ( xc_domain_memory_decrease_reservation( - xc_handle, domid, 1, 0, &mfn ) != 1 ) + xc_handle, domid, 1, 0, &mfn) != 1 ) { fprintf(stderr,"xc_make_page_below_4G decrease failed. mfn=%lx\n",mfn); return 0; } - if ( xc_domain_memory_increase_reservation( xc_handle, domid, 1, 0, 32, &new_mfn ) != 1 ) + + if ( xc_domain_memory_increase_reservation( + xc_handle, domid, 1, 0, 32, &new_mfn) != 1 ) { fprintf(stderr,"xc_make_page_below_4G increase failed. mfn=%lx\n",mfn); return 0; } + return new_mfn; } -- 2.30.2